package org.example.back.service.user;

import org.example.back.entity.user.User;
import org.example.back.mapper.user.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.DigestUtils;

import java.util.Map;

@Service
public class UserService{

    @Autowired
    private UserMapper userMapper;

    @Autowired
    private EmailService emailService;

    /**
     * 用户注册方法
     *
     * @param user 用户信息（包括邮箱和验证码）
     * @param inputCode 用户输入的验证码
     * @return 注册结果，成功返回true，失败返回false
     */
    @Transactional
    public Map<String, Object> register(User user, String inputCode) {
        // 验证验证码
        boolean isCodeValid = emailService.verifyCode(user.getEmail(), inputCode);
        if (!isCodeValid) {
            return Map.of("success", false, "message", "验证码无效或已过期");
        }

        // 检查邮箱是否已注册
        if (userMapper.findByEmail(user.getEmail()) != null) {
            return Map.of("success", false, "message", "该邮箱已被注册");
        }

        // 密码加密
        user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));

        // 保存用户信息
        boolean isSaved = userMapper.insertUser(user) > 0;
        if (isSaved) {
            return Map.of("success", true, "message", "注册成功");
        } else {
            return Map.of("success", false, "message", "注册失败，请稍后重试");
        }
    }

    /**
     * 用户登录
     *
     * @param email 用户邮箱
     * @param password 原始密码
     * @return 登录成功返回用户对象，否则返回 null
     */
    public User login(String email, String password) {
        User user = userMapper.findByEmail(email);
        if (user != null && user.getPassword().equals(DigestUtils.md5DigestAsHex(password.getBytes()))) {
            return user;
        }
        return null;
    }

    /**
     * 根据用户 ID 查询邮箱
     *
     * @param userId 用户 ID
     * @return 邮箱地址，如果未找到返回 null
     */
    public String getEmailById(Integer userId) {
        return userMapper.getEmailById(userId);
    }

    /**
     * 修改用户邮箱
     *
     * @param userId 用户 ID
     * @param newEmail 新邮箱地址
     * @return 修改是否成功（邮箱未被占用并成功修改）
     */
    @Transactional
    public boolean updateEmail(Integer userId, String newEmail) {
        // 可选：检查新邮箱是否已被注册
        if (userMapper.findByEmail(newEmail) != null) {
            return false; // 邮箱已存在
        }

        userMapper.updateEmail(userId, newEmail);
        return true;
    }

    //获取用户名
    public String getUsernameById(Integer userId) {
        return userMapper.getUsernameById(userId);
   }
    //修改用户名
    @Transactional
    public boolean updateUsername(Integer userId, String newUsername) {
        userMapper.updateUsername(userId, newUsername);
        return true;
    }
    
    //修改密码
    @Transactional
    public boolean updatePassword(Integer userId, String oldPassword, String newPassword) {
        User user = userMapper.findById(userId);
        if (user == null) {
        return false;
    }

    // 对旧密码加密后比对
    String encryptedOldPassword = DigestUtils.md5DigestAsHex(oldPassword.getBytes());
    if (!user.getPassword().equals(encryptedOldPassword)) {
        return false; // 原密码错误
    }

    // 对新密码加密后更新
    String encryptedNewPassword = DigestUtils.md5DigestAsHex(newPassword.getBytes());
    return userMapper.updatePassword(userId, encryptedNewPassword) > 0;
}

}
